#ifndef IOT_DEBUG_H
#define IOT_DEBUG_H

/**
 * @copyright Copyright (c) 2025 
 * CSG Digital Grid Technology (Guangdong) Co., Ltd.
 * @author zhouyan
 * @brief 错误信息打印
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string>

#ifndef nullptr
#  ifdef __cplusplus
#    define nullptr 0    //c++中将NULL定义为整数0
#  else
#    define nullptr (void*)0                //c语言中NULL为void类型的指针，但允许将NULL定义为0
#  endif // __cplusplus
#endif // nullptr

#define ALARM_IS_NORMAL                  1      //告警恢复
#define OPEN_COMREMAP_FAIL              -1      //打开comRemap.json文件失败
#define OPEN_COMSETTING_FAIL            -2      //打开comSetting.json文件失败
#define PARSE_COMSETTING_FAIL           -3      //解析comSetting.json文件失败
#define OPEN_DEVLIST_FAIL               -4      //打开DevList.json文件失败
#define PARSE_DEVLIST_FAIL              -5      //解析DevList.json文件失败
#define DEVLIST_IS_NULL                 -6      //DevList.json文件内容为空
#define DEVLIST_DEVID_REPEAT            -7      //DevList.json中devID重复
#define DEVLIST_INDEX_FAIL              -8      //DevList.json中串口index错误

#define MODE_FILE_NOTEXIST              -9      //对应的南向模型文件不存在
#define PARSE_MODE_FAIL                 -10     //解析南向模型文件失败
#define MODE_TYPE_ERROR                 -11     //南向模型文件类型定义错误
#define MODE_REGNAME_ERROR              -12     //南向模型文件Regname定义错误
#define MODE_PROTOCOL_ERROR             -13     //南向模型文件协议解析失败
#define MODE_REGSIZE_ERROR              -14     //南向模型文件寄存器数量错误

#define OPEN_SOUTHDEVICELIST_FAIL       -15     //打开SouthDeviceList.json文件失败
#define PARSE_SOUTHDEVICELIST_FAIL      -16     //解析SouthDeviceList.json文件内容失败
#define PARSE_DATACENTERMODE_FAIL       -17     //解析数据中心模型文件失败
#define SOUTHDEVICELIST_DEVICE_IS_NULL  -18     //SouthDeviceList.json文件中通过ComIndex及DevId查找对应的南向设备为空
#define DATACENTERMODE_ITEM_IS_NULL     -19     //SouthDeviceList.json文件数据中心属性名称为空
#define SOUTHMODE_ITEM_IS_NULL          -20     //SouthDeviceList.json文件南向属性名称为空

#define REGISTER_MODE_FAIL              -21     //注册模型文件失败
#define REGISTER_DEVICE_FAIL            -22     //注册设备失败
#define APP_IS_RUN                      -23     //应用程序已经在运行
#define REGISTER_UART_FAIL              -24     //注册串口失败
#define READ_WHITELIST_FAIL             -25     //写白名单后读写入的白名单数量错误
#define SOUTHMODE_ITEM_IS_REPEAT        -26     //数据中心设备项重复
#define NOT_CONFIG_SERIALNUMBER         -27     //白名单配置后未配置SerialNumber
#define NOT_CONFIG_REGSTARTADDRPLC      -28     //南向模型文件未配置RegStartAddrPLC
#define NOT_CONFIG_WHITELIST            -29     //南向模型文件未配置WhiteList
#define SERIALNUMBER_SIZE_FAILE         -30     //配置SerialNumber长度错误

extern int ErrCode;
extern char ErrMsg[1024];
extern std::string StartTime;
#endif // IOT_DEBUG_H
